// Exclude<UnionType, ExcludedMembers>
// 从一个 联合类型中 除去 另一个 联合类型 中的所有成员，得到一个新的联合类型

type fafds = Exclude<"a"|"b"|"c"|"d","a"|"b">
/* 
    type fafds = "c" | "d"
*/
export {}

type afa = 'a'|"b" extends 'a'|'b'|"c" ? true : false 

// 关于条件类型的extends语法
    // 1、对象类型的继承判断
        // A对象类型 extends B对象类型? true: false 
        // A对象类型是否extends B对象类型，判断原则是A对象类型是否包含B对象类型的所有属性，如果包含就是true
        type dawa = {a:string,b:number} extends {a:string,c:number} ? true :false
    // 2、其他类型的继承判断
        // A类型 extends B类型 ? true:false
        // 判断依据是，A类型 的范围 是不是 在 B类型的 范围 内，如果是就是true，
        type adda = 'a' extends string ? true :false

type exclude<U, E extends U> =U extends E ?never:U
type dadaw = never |"c" // never | 类型A  等价于类型A
type adas = exclude<"a"|"b"|"c","a"|"b">